Go 方法

匿名字段的方法

package main

import "fmt"

// 属于结构体的匿名字段的方法可以直接调用 

type Address struct {
	city string
	state string
}

func (a Address) fullAddress(){
	fmt.Println(a.city,a.state)
}

type Person struct {
	name string
	age int
	Address
}

func main() {
	p := Person{
		name:"Jack",
		age:41,
		Address:Address{
			city:"NJ",
			state:"CHN",
		},
	}

	p.fullAddress()  // 访问 Address 结构体的 fullAddress() 方法
}

方法值接收器与函数值参数使用区别

package main

import "fmt"

// 当一个函数有一个值参数,它能接收一个值参数;
// 当一个方法有一个值接收器,它可以接受值接收器和指针接收器

type Rectangle struct {
	length int
	width int
}

func area(r Rectangle){
	fmt.Println("func:",r.width * r.length)
}

func (r Rectangle) area(){
	fmt.Println("指针:",r.width * r.length)
}

func main() {
	r := Rectangle{
		length:20,
		width:30,
	}

	area(r)
	r.area()

	p := &r

	//area(p)  //报错,compilation error

	p.area() //相当于 (*p).area()

}

函数与方法使用指针接收器

package main

import "fmt"

// 函数使用指针参数只接收指针,
// 而使用指针接收器的方法可以使用值接收器和指针接收器

type rect struct {
	length int
	width int
}

func Area(r *rect){
	fmt.Println(r.length * r.width)
}

func (r *rect) Area(){
	fmt.Println(r.length * r.width)
}

func main() {
	r := rect{
		length:15,
		width:10,
	}

	p := &r
	Area(p)
	p.Area()

	//Area(r)  //报错 cannot use r (type rect) as type *rect in argument to Area

	r.Area() // 使用值来调用指针接收器

}

在非结构体上的方法

package main

// 为了在一个类型上定义一个方法,方法的接收器类型定义和方法的定义应该在同一个包中 。
// 在下面的代码中尝试把一个 add 方法添加到内置的类型 int,这是不允许的,
// 因为 add 方法的定义和 int 类型的定义不在同一个包中。

func (a int) add(b int){

}

func main() {
	// 运行该程序报错 cannot define new methods on non-local type int
}
package main

// 让该程序工作的方法是为内置类型 int 创建一个类型别名,然后创建一个以该类型别名为接收器的方法。

type myInt int

func (a myInt) add(b myInt){

}

func main() {
	
}

Ref

Go语言中文网

Gradio是一个用于快速构建机器学习界面的Python库,它主要依赖于Flask和Werkzeug等库来搭建Web应用程序。如果您需要在Gradio中调用Go语言方法,您需要先将Go方法编译成可执行文件,然后通过Gradio的接口来调用该可执行文件。 具体来说,您需要编写一个Python函数来启动Go可执行文件,并将其作为子进程运行。在这个Python函数中,您可以使用Python的subprocess模块来启动Go可执行文件,并使用标准输入和输出流与该进程进行通信。然后,您可以将Gradio的输入传递给子进程,并将子进程的输出作为Gradio的输出返回。 下面是一个简单的示例代码,演示如何在Gradio中调用Go可执行文件: ```python import subprocess def go_method(input): # 启动Go可执行文件 process = subprocess.Popen(['./path/to/go/executable'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) # 将输入传递给子进程 process.stdin.write(input.encode()) process.stdin.flush() # 读取子进程的输出 output = process.stdout.readline().decode() # 关闭子进程 process.stdin.close() process.stdout.close() process.wait() # 返回输出 return output ``` 在这个示例中,我们假设Go可执行文件是在当前目录中的,您需要将`./path/to/go/executable`替换为实际的Go可执行文件路径。此外,这个示例只处理单行输入和输出,如果您的Go方法需要处理更复杂的输入和输出,请根据实际情况进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值