Solidity函数可见性详解,一文搞懂public、private、internal、external

第一章:Solidity语言入门

Solidity 是以太坊平台上最主流的智能合约开发语言,专为在 Ethereum 虚拟机(EVM)上编写可执行代码而设计。它是一种静态类型、面向合约的语言,语法接近 JavaScript,便于前端开发者快速上手。

开发环境搭建

要开始编写 Solidity 合约,首先需要配置基础开发环境。推荐使用 Remix IDE,这是一个基于浏览器的集成开发环境,无需本地安装即可编译和部署合约。
  • 访问 Remix IDE 官网
  • 创建新文件,例如 Greeter.sol
  • 编写、编译并部署到 JavaScript VM 或 MetaMask 连接的网络

第一个 Solidity 合约

以下是一个简单的智能合约示例,用于存储和读取一个字符串值:
// 指定 Solidity 编译器版本
pragma solidity ^0.8.0;

// 定义一个名为 Storage 的合约
contract Storage {
    // 声明一个私有字符串变量
    string private message;

    // 构造函数,在部署时初始化消息
    constructor(string memory initMessage) {
        message = initMessage;
    }

    // 外部可调用函数,返回当前消息
    function getMessage() public view returns (string memory) {
        return message;
    }

    // 外部可调用函数,更新消息内容
    function setMessage(string memory newMessage) public {
        message = newMessage;
    }
}
该合约包含构造函数、状态变量和两个公共函数。 getMessage 使用 view 修饰符表明不修改状态,而 setMessage 会变更存储中的数据。

常见数据类型

Solidity 支持多种内置类型,以下是常用类型简表:
类型说明
bool布尔值,true 或 false
uint256256 位无符号整数,常用于金额或计数
string动态长度字符串
address以太坊账户地址,如 0x...

第二章:函数可见性基础概念

2.1 理解函数可见性的安全意义

函数的可见性控制是保障程序安全的关键机制。通过限制函数的访问范围,可有效防止外部恶意调用或误操作导致的数据泄露与状态破坏。
可见性修饰符的作用
在多数编程语言中,函数可见性由修饰符控制,常见包括:
  • public:允许任意外部调用
  • private:仅限当前类或模块内访问
  • protected:子类可继承,但外部不可见
代码示例与分析

package user

func (u *User) ChangePassword(old, new string) bool {
    if u.validatePassword(old) { // 调用私有方法
        u.password = hash(new)
        return true
    }
    return false
}

// validatePassword 是私有函数,不暴露给外部
func (u *User) validatePassword(pw string) bool {
    return u.password == hash(pw)
}
上述代码中, validatePassword 为私有函数,避免外部绕过验证逻辑直接修改密码,增强了系统的安全性。公开函数仅暴露必要接口,形成访问边界。

2.2 public与external的调用机制对比

在Solidity中, public与 external是两种常见的函数可见性修饰符,它们在调用方式和Gas消耗上存在显著差异。
调用方式差异
public函数既可被外部合约调用,也可被内部调用;而 external函数只能通过外部消息调用,内部调用需使用 this.func()。
function externalFunc() external {
    // 只能外部调用
}

function publicFunc() public {
    // 可内部或外部调用
}
上述代码中, externalFunc若在合约内直接调用会编译失败,必须通过 this代理。
Gas效率对比
  • external函数参数直接从calldata读取,节省内存开销
  • public函数需将参数复制到内存,额外消耗Gas
对于仅外部调用的接口,优先使用 external以优化性能。

2.3 private与internal的访问边界解析

在Go语言中,`private`与`internal`是控制包访问权限的重要机制。标识符首字母大小写决定其是否对外暴露:小写为`private`,仅限包内访问。
访问规则对比
  • private:同一包内可访问,跨包不可见
  • internal:仅允许被当前模块下的包导入
示例代码

package utils

var secretKey string = "local-only" // private变量
func Encrypt(data string) string {   // public函数
    return transform(data, secretKey)
}
上述代码中, secretKey为私有变量,外部包无法直接读取;而 Encrypt因首字母大写,可在其他包调用,实现封装性。
路径约束说明
导入路径是否允许访问internal
example.com/module/internal/utils✅ 是(同模块)
other.com/module/internal/utils❌ 否(跨模块)

2.4 可见性对Gas消耗的影响分析

在Solidity中,函数和状态变量的可见性修饰符(如 public、 private、 internal、 external)不仅影响访问控制,还直接关系到Gas消耗。
可见性与调用开销
external函数只能被外部调用,编译器优化其参数存储于calldata,节省内存。而 public函数既可内部也可外部调用,内部调用时需复制数据至内存,增加Gas开销。
function getData() external pure returns(uint) {
    return 42;
}
此函数使用 external,外部调用更高效;若为 public,即使逻辑相同,内部调用也会产生额外开销。
状态变量的访问成本
private或 internal变量无法被外部直接读取,需通过 public视图函数暴露,每次调用均产生Gas。合理设计可见性可减少冗余函数接口。
  • external:适合仅外部调用,Gas最优
  • public:灵活但成本较高
  • internal/private:降低外部访问,节省交互Gas

2.5 编译器如何验证可见性规则

编译器在类型检查阶段通过符号表和作用域树来验证标识符的可见性。每个声明的变量、函数或类型都会被记录在对应的作用域中,编译器根据词法作用域规则逐层查找。
作用域解析流程
  • 进入块级作用域时,创建新的符号表
  • 声明标识符前先检查当前作用域是否已存在同名变量
  • 引用标识符时,从内层向外层逐级查找
  • 若未找到有效声明,则报错“undefined identifier”
Go语言中的可见性示例

package main

var PublicVar  = "visible"  // 首字母大写,外部可访问
var privateVar = "hidden"   // 小写,仅包内可见

func ExportedFunc() { }     // 外部可调用
func internalFunc() { }     // 仅包内可用

在编译期间,Go 编译器依据标识符首字母大小写决定其导出状态。大写字母开头的标识符会被标记为“exported”,并写入导出符号表,供其他包引用;小写则限制在包内使用。

第三章:四种可见性关键字详解

3.1 public函数的设计场景与实例

在Go语言开发中,public函数(首字母大写)用于暴露包的对外接口,是模块间通信的关键桥梁。典型应用场景包括API服务导出、组件扩展点设计等。
典型使用场景
  • 提供包级初始化入口,如InitConfig()
  • 暴露核心业务逻辑,如CreateUser()
  • 实现接口适配器模式,供外部调用
代码示例:用户注册服务

// RegisterUser 提供公开的用户注册接口
func RegisterUser(username, email string) error {
    if !isValidEmail(email) {
        return fmt.Errorf("无效邮箱")
    }
    return saveToDB(username, email)
}
该函数作为public方法,封装了参数校验与持久化逻辑。接收用户名和邮箱,验证格式后写入数据库,对外屏蔽底层细节,提升调用安全性与一致性。

3.2 private函数的安全封装实践

在Go语言开发中,合理使用private函数是保障模块内部逻辑安全的关键。通过首字母小写的方式限制函数可见性,可有效防止外部包的直接调用,提升封装性。
最小暴露原则
仅暴露必要的接口,将核心逻辑封装在private函数中,降低外部误用风险。
参数校验前置

func (s *Service) processRequest(req *Request) error {
    if err := validate(req); err != nil { // 调用private校验
        return err
    }
    return s.handle(req)
}

func validate(req *Request) error {
    if req.ID == "" {
        return ErrInvalidID
    }
    return nil
}
上述代码中, validate 为private函数,确保输入校验逻辑不被外部绕过,增强安全性。
  • 避免在private函数中执行副作用操作
  • 建议对敏感逻辑添加内部日志追踪

3.3 internal函数在继承中的应用

在Go语言的包设计中,`internal` 函数和目录被广泛用于限制代码的可见性。通过将特定功能放置在 `internal` 目录下,仅允许其直接父包及其子包调用,从而实现封装与访问控制。
访问规则说明
  • 位于 project/internal/utils 的函数只能被 project/... 包访问
  • 外部模块(如 otherproject)无法导入该路径,编译报错
典型代码结构
// project/internal/service/logic.go
package service

func InternalProcess(data string) {
    // 仅项目内部可调用的核心逻辑
    println("executing internal logic:", data)
}
上述代码中, InternalProcess 函数可被同一项目中的主包调用,但禁止外部模块引用,确保关键逻辑不被滥用。
继承场景下的应用
在模块化架构中,子包可通过继承方式复用 internal 函数,形成受控的逻辑扩展链,提升代码安全性与维护性。

第四章:实际开发中的可见性模式

4.1 构造函数与初始化函数的可见性选择

在Go语言中,构造函数通常以工厂模式实现,其可见性由函数名的首字母大小写决定。若需对外暴露,应使用大写字母开头。
构造函数的可见性控制
type Database struct {
    host string
}

func NewDatabase(host string) *Database {
    return &Database{host: host}
}
上述 NewDatabase为导出函数,可在包外调用,返回指向 Database的指针。小写的字段 host虽不可直接访问,但可通过构造函数安全初始化。
初始化函数的设计考量
  • 导出构造函数(如NewXXX)用于公共API
  • 非导出函数(如newXXX)适用于包内复用
  • 可结合init()进行全局配置,但应避免依赖复杂状态

4.2 接口与外部调用中的external使用规范

在智能合约开发中,`external` 关键字用于限定函数仅可被外部调用,提升安全性和 gas 效率。相比 `public`,`external` 函数不支持内部调用,避免意外的上下文污染。
external 函数的典型用法

function deposit() external payable {
    require(msg.value > 0, "Deposit value must be positive");
    balances[msg.sender] += msg.value;
}
该代码定义了一个外部可调用的存款函数。`external` 限制仅外部账户或其他合约可触发此方法,`payable` 允许接收以太币。参数 `msg.value` 表示转入金额,`msg.sender` 为调用者地址。
external 与 public 的对比
特性externalpublic
外部调用支持支持
内部调用不支持支持
gas 成本较低较高

4.3 权限控制中private与internal的协作

在Go语言的包设计中, private(小写标识符)和 internal目录机制共同构建了细粒度的访问控制体系。
internal目录的访问限制
internal目录具有特殊语义:仅允许其直接父包及其子包导入,其他外部包无法引用。这一机制强化了模块封装。

// project/internal/service/auth.go
package service

func Authenticate() { /* 逻辑实现 */ } // private 函数
该函数仅能在 service包内部调用,且整个 internal/service只能被项目主包引入,防止外部滥用。
权限层级的协同策略
  • 使用private控制函数与变量的包内可见性
  • 利用internal限制敏感包的导入范围
  • 两者叠加实现“包内私有 + 模块隔离”的双重保护

4.4 可见性误用导致的安全漏洞案例

私有成员的意外暴露
在面向对象编程中,开发者常依赖访问修饰符(如 private)保护敏感数据。然而,反射机制或序列化操作可能绕过这些限制,导致本应私有的字段被外部读取或修改。
  • Java 中通过反射访问 private 字段
  • JSON 序列化框架默认导出所有 getter 方法
  • Android 中使用 android:exported="true" 暴露组件
代码示例与分析

public class User {
    private String password;

    public String getPassword() {
        return password;
    }
}
尽管 password 被声明为 private,但公共的 getPassword() 方法使其可通过序列化(如 Jackson、Gson)自动导出。攻击者可构造恶意请求,获取本应隐藏的凭证信息。
防护建议
使用 @JsonIgnore 注解或设置序列化策略,避免敏感字段输出。同时审查所有公共方法的暴露风险。

第五章:总结与最佳实践建议

构建可维护的微服务架构
在实际生产环境中,微服务拆分应遵循单一职责原则。例如,订单服务不应耦合支付逻辑,可通过事件驱动方式解耦:

func (s *OrderService) PlaceOrder(order Order) error {
    if err := s.repo.Save(order); err != nil {
        return err
    }
    // 发布订单创建事件,由支付服务监听
    s.eventBus.Publish("order.created", Event{
        Data: order,
        Metadata: map[string]string{"source": "order-service"},
    })
    return nil
}
监控与日志策略
统一日志格式并集成集中式监控系统是保障系统稳定的关键。推荐使用结构化日志,并通过字段标记关键信息:
  • 所有服务输出 JSON 格式日志
  • 必须包含 trace_id 以支持链路追踪
  • 错误日志需标注 error_code 和 level
  • 通过 Fluent Bit 收集并转发至 ELK 集群
安全配置清单
项目配置要求验证方式
API 认证强制使用 JWT + OAuth2Postman 测试无 Token 拒绝访问
敏感数据数据库字段 AES-256 加密DB 审计查看原始数据是否加密
部署流程可视化
→ 代码提交至 GitLab → 触发 CI 构建镜像 → 推送至私有 Registry →
→ Argo CD 检测新版本 → 自动同步至 Kubernetes 命名空间 →
→ 健康检查通过后切换流量 → Slack 通知部署完成
Solidity语法深入讲解(函数可见性,函数修饰器,回退函数,事件,异常处理) 目录标题Solidity函数可见性Solidity函数状态可变性函数修饰器(modifier)回退函数(fallback)事件(event)Solidity异常处理Solidity中的单位 Solidity函数可见性 函数的可见性可以指定为 external,public ,internal 或者 private; 对于状态变量,不能设置为 external ,默认是 internal。 • external :外部函数作为合约接口的一部分,意味着我们可以从其他合约和交易中调用。 一个外部函数 f不能从内部 阅读详情

相关推荐

2.04---合约函数的可见性:public / private / internal / external

【摘要】 Solidity函数可见性(public/private/internal/external)是合约模块化设计的核心机制,决定了函数的调用边界而非权限控制。本文通过对比表、调用结构图和代码示例,系统解析四种可见性的特性:public支持全场景调用并自动生成getter;private仅限当前合约内部使用;internal允许继承合约调用;external优化gas成本但需通过this间接内部调用。

鄙人kunzhi96,感恩遇见! 2万+

【Solidity】internal、private、external、public区别

public与private 对于public和private,相信学过其他主流语言的人都能明白: public修饰的变量和函数,任何用户或者合约都能调用和访问。 private修饰的变量和函数,只能在其所在的合约中调用和访问,即使是其子合约也没有权限访问。 external和internal 除 public 和 private 属性之外,Solidity 还使用了另外两个描述函...

黄嘉成的博客 2万+

【易错概念】以太坊Solidity函数的external/internal,public/private,view/pure/payable区别

1. 函数类型:内部(internal)函数和外部(external)函数 函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返回函数类型变量。 函数类型有两类:- 内部(internal)函数和 外部(external) 函数: 内部函数只能在当前合约内被调用(更具体来说,在当前代码块内,包括内部库函数和继承的函数中),因为它们不能在当前合约上下文的外部被执行。 调用一个内部函数是通过跳转到它的入口标签来实现的,就像在当前合约..

2106

以太坊 solidity 函数修饰符总结 public、private、internal、external、view、pure的区别

contract func_demo { uint256 count; // 仅读取状态变量 function getCount() public view returns(uint256) { return count; } } 在Solidity代码中, 函数的访问权限: public 最大的访问权限,子类可以继承、可以访问,当前类能访问 private 仅限内部访问,子类不能继承、不能访问 internal 子类可以继承、可以访问,当前.

软件工程小施同学 的专栏 2257

别再死记硬背了!用‘小乌龟’实战图解ROS1核心指令(rosnode/rostopic/rosparam保姆级手册)

本文通过经典的turtlesim乌龟仿真器,以可视化实战方式讲解ROS1核心指令(rosnode/rostopic/rosparam),帮助初学者摆脱死记硬背,在操控乌龟的过程中轻松掌握节点管理、话题通信和参数设置等ROS1核心概念。

weixin_28731223的博客 370

华为eNSP实战:手把手教你配置DHCP全局地址池(含AP固定IP分配)

本文通过华为eNSP模拟器,详细演示了如何配置DHCP全局地址池,为不同业务VLAN动态分配IP地址,并重点讲解了如何通过MAC地址绑定为接入点(AP)分配固定IP。文章涵盖了从拓扑设计、基础网络搭建到地址池精细配置、验证测试及常见故障排查的全流程,是网络工程师掌握企业级DHCP部署与AP管理的实用指南。

weixin_29235923的博客 598

Solidity——关键字public、private、internal和external

在Solidity中,publicprivateinternal和external是四个不同的访问修饰符,用于限定函数或状态变量的可见性和可访问性。

tomggo的博客 1890

SigFit实战:从FEA到光学仿真的热力耦合分析全流程解析

在光机系统与芯片封装等精密工程领域,热与力的耦合效应是影响产品性能与可靠性的核心物理问题。有限元分析(FEA)是预测结构在热、力载荷下变形与应力的基础工具,但其结果通常无法直接用于评估光学性能。这需要一座桥梁,将物理场数据转化为光学设计语言。其核心原理在于数据映射与面形表征技术,例如通过泽尼克多项式拟合,将离散的节点位移分解为离焦、像散等标准光学像差。这项技术的工程价值在于,它实现了多物理场仿真的闭环,使工程师能在设计阶段精准预测热变形或应力对波前误差、调制传递函数等关键光学指标的影响。其典型应用场景包括高

weixin_28630185的博客 337

Solidity中常见的修饰符以及它们的可见性和用法

在Solidity中,修饰符是用于修改函数或状态变量的行为的关键元素之一。它们允许您在不改变函数或状态变量本身的情况下,添加额外的逻辑或约束条件。1、private:能被继承、不能在外部调用、能在内部调用。2、internal:能被继承、不能在外部调用、能在内部调用。3、external:不能被继承、能在外部调用、不能在内部调用,可以通过“this”关键字强行调用4、public:能被继承、能在外部调用、能在内部调用,它的权限最大。5、pure:能读取全局变量、不能修改全局变量、不会消耗Gas。

weixin_60680666的博客 2091

aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二前言一、手眼标定是什么?二、标定软件安装1.aruco_ros安装2.vision_visp安装3.easy_handeye安装4.realsense驱动安装5.安装realsense ROS软件包三、配置1.launch文件修改2.打印二维码四、手眼标定1.启动launch文件2.标定步骤3.发布tf关系 前言 前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_ha

转角 6373

unity游戏开发日志(一)将mmd模型导入unity,并解决材质丢失的问题

unity音乐游戏开发,导入角色模型并解决材质问题

yizhigou1的博客 1762

Solidity ----private、public、internal 和 external

Solidity 定义的函数的属性默认为public。 这就意味着任何一方 (或其它合约) 都可以调用你合约里的函数。 显然,不是什么时候都需要这样,而且这样的合约易于受到攻击。 所以将自己的函数定义为private是一个好的编程习惯,只有当你需要外部世界调用它时才将它设置为public。 定义private函数: uint[] numbers; function _addToArray...

ZXT149074136的博客 2222

使用C#调用百度地图并实现坐标点的设置以及读取

使用C#调用百度地图申请百度地图密钥以及查看百度API程序实现功能:最终图利用webBrowser控件展示地图 申请百度地图密钥以及查看百度API 网址:http://lbsyun.baidu.com/apiconsole/key#/home 网址:http://lbsyun.baidu.com/jsdemo.htm#c1_3 程序实现功能: 1、输入网址那可以调用本地的html文件,也可以访问其他网站 2、输入坐标、添加坐标按钮,可以将坐标值传入html文件中,显示在经纬度的文本框中 3、定位按钮可以

qq_39261042的博客 3734

函数和状态变量有四种可见性类型external ,public ,internal 或者 private

由于 Solidity 有两种函数调用(内部调用不会产生实际的 EVM 调用或称为“消息调用”,而外部调用则会产生一个 EVM 调用), 函数和状态变量有四种可见性类型。 函数可以指定为external,public,internal或者private,默认情况下函数类型为public。 对于状态变量,不能设置为external,默认是internal。 external: 外部函数作为合约接口的一部分,意味着我们可以从其他合约和交易中调用。 一个外部函数f不能从内部调用(即f...

q_776355102的博客 1872

开心消消乐

1)当点击一个1时,该1变被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8个方向的1(如果存在1)均会自动反转为0;2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0;上述样例中,四个角上的1均在中间的1的相邻8个方向上,因此只需要点击一次即可。给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。在上述4 * 4的矩阵中,只需要点击2次,即可将所有的1进行消除。接下来N行表示矩阵的初始值,每行均为M个数,取值范围[0,1]

面试高手的博客 2729

【AI 编程工具】Codex配置部署指南

目录一、环境准备与基础安装1. 系统兼容性检查2. 前置依赖安装3. 安装方式选择二、API密钥配置与认证1. 获取API密钥2. 配置文件设置3. 临时配置方式三、沙盒环境配置与安全策略1. 沙盒模式选择2. 安全最佳实践四、高级功能配置1. 模型上下文协议(MCP)配置2. 模型版本切换3. 自定义网关配置五、常见问题排查1. 安装失败2. API调用失败3. 处理速度慢4. 配置文件不生效六、生产环境部署建议macOS/Linux:官方提供稳定支持,推荐使用原生环境Windows:官方标注为实验性支持

以实战经验介绍行业知识 2886

Solidity函数修饰符(public、external、internal、private、view、pure)

在Solidity中,public、private、internal和external是四个不同的访问修饰符,用于限定函数或状态变量的可见性和可访问性。

西京刀客 1118

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Q1:private、internal、public 和 external 函数有什么区别?

🔬🔬: 150+ 道面试题 × 103 篇深度解析 = 你的 Solidity 修炼秘籍。

The future is already here it's just not evenly distributed。 531

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

区块链100讲:以太坊Solidity函数的external/internal,public/private区别

1 函数类型内部(internal)函数和外部(external)函数 函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返回函数类型变量。 函数类型有两类:- 内部(internal)函数和 外部(external) 函数: 内部函数只能在当前合约内被调用(更具体来说,在当前代码块内,包括内部库函数和继承的函数中),因...

HiBlock的博客 1347

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Solidity语言详解——函数和状态变量的可见性及Getter函数

本文内容包括 Solidity 语言的状态变量可见性、函数可见性和 Getter 函数。由于 Solidity 有两种函数调用(内部调用不会产生实际的 EVM 调用或称为“消息调用”,而外部调用则会产生一个 EVM 调用), 函数和状态变量有四种可见性类型。 函数可以指定为 `external` ,`public` ,`internal` 或者 `private`。 对于状态变量,不能设置为 `external` ,默认是 `internal` 。

StevenX5 2136

以太坊Solidity函数的external/internal,public/private,view/pure/payable区别

1. 函数类型:内部(internal)函数和外部(external)函数 函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量,也可以将一个函数作为参数进行传递,还能在函数调用中返回函数类型变量。 函数类型有两类:- 内部(internal)函数和 外部(external) 函数: 内部函数只能在当前合约内被调用(更具体来说,在当前代码块内,包括内部库函数和继承的函数中),因为它们不能在当前合约上下文的外部被执行。 调用一个内部函数是通过跳转到它的入口标签来实现的,就像在当前合约的内部

sooxin的专栏 1387

【Solidity学习笔记】public、private、internal、external区别

理解这几个词之前,我们可以把一个Contract类比成一个Class Public: 修饰的变量和函数,合约内部函数和外部合约函数都能调用和访问, 类比C++中Class的Public属性 Private: 修饰的变量和函数,只能在其所在的合约中调用和访问,即使是其子合约也无法访问,类比C++中Class的Private属性 Internal: 和 Private类似,不过, 如果某个合约继...

ljlinjiu的博客 2795

【Solidity 开发】访问可见性 - internal & private & external & public

本文按照访问可见范围由大到小,简要介绍以上4( internal、private、external、public)个关键字。

weixin_43742184的博客 1785

Solidity变量与函数的可见性

Solidity变量与函数的可见性

m0_72315083的博客 796

Solidity08 Solidity 函数

Solidity 函数

J_Lee 1834
上一篇: DevOps工具链如何选型:9大核心工具深度评测与落地实践
下一篇: 自动化办公脚本大公开:99%的人都不知道的Python提效秘技
VarFun
博客等级 码龄1年 151粉丝 1977原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值