属于我们Go语言的toString!

在 Go 语言中,类似于 Java 中的 toString() 方法,可以通过实现 String() 方法来自定义类型的字符串表示形式。这种机制使得在打印自定义类型的值时能够输出更加可读性高的字符串。在本文中,我们将探讨如何在 Go 中实现类似的功能,并展示一个示例来说明其用法。

实现String()方法

在 Go 中,如果一个类型实现了 String() 方法,那么当该类型的值被打印为字符串时,会自动调用该方法并返回相应的字符串表示。下面是一个简单的例子:

package main

import "fmt"

// 定义一个自定义类型
type Person struct {
    Name string
    Age  int
}

// 实现 String() 方法
func (p Person) String() string {
    return fmt.Sprintf("Name: %s, Age: %d", p.Name, p.Age)
}

func main() {
    person := Person{Name: "Alice", Age: 30}
    // 打印 Person 类型的值时会自动调用 String() 方法
    fmt.Println(person) // 输出:Name: Alice, Age: 30
}

在上面的示例中,我们定义了一个名为 Person 的结构体,并为其实现了 String() 方法。该方法返回一个字符串,表示该结构体的属性。当我们打印 Person 类型的值时,会自动调用 String() 方法,并输出该方法返回的字符串。

适用场景

自定义类型的字符串表示形式对于调试和日志记录非常有用。通过实现 String() 方法,我们可以自定义类型的输出格式,使得输出更加易读和友好。

总结

通过实现 String() 方法,我们可以在 Go 中实现类似于 Java 中的 toString() 方法的功能,从而自定义类型的字符串表示形式。这种机制为我们提供了更多灵活性,使得在输出自定义类型时能够更加方便和直观。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,对称加密算法可以在不同的编程语言中实现,并且可以实现相同的加密解密结果。下面是一个使用Go、Java和JavaScript实现AES对称加密算法的示例代码: Go: ```go package main import ( "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" ) func main() { key := []byte("1234567890123456") plaintext := []byte("Hello, world!") block, _ := aes.NewCipher(key) ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := rand.Read(iv); err != nil { panic(err) } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) fmt.Printf("Encrypted: %v\n", base64.URLEncoding.EncodeToString(ciphertext)) } ``` Java: ```java import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class Main { public static void main(String[] args) throws Exception { byte[] key = "1234567890123456".getBytes(); byte[] plaintext = "Hello, world!".getBytes(); KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); keyGenerator.init(128, new SecureRandom(key)); byte[] iv = new byte[16]; SecureRandom random = new SecureRandom(); random.nextBytes(iv); SecretKeySpec secretKeySpec = new SecretKeySpec(keyGenerator.generateKey().getEncoded(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(iv)); byte[] ciphertext = cipher.doFinal(plaintext); System.out.printf("Encrypted: %s\n", Base64.getEncoder().encodeToString(ciphertext)); } } ``` JavaScript: ```javascript const crypto = require('crypto'); const key = Buffer.from('1234567890123456'); const plaintext = Buffer.from('Hello, world!'); const iv = crypto.randomBytes(16); const cipher = crypto.createCipheriv('aes-128-cbc', key, iv); let ciphertext = cipher.update(plaintext); ciphertext = Buffer.concat([ciphertext, cipher.final()]); console.log(`Encrypted: ${ciphertext.toString('base64')}`); ``` 这三段代码实现了相同的AES对称加密算法,并且输出的加密结果相同。如果需要解密,可以使用相同的密钥和IV值,以及相同的算法和模式进行解密。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值