小编Owl*_*Owl的帖子

如何处理带有 Nil Receiver 的方法?

type Product struct {
    productName string
}

func (p *Product) GetProductName() string {
    return p.productName
}
Run Code Online (Sandbox Code Playgroud)

在 Go 中,通常应该如何处理方法上的接收者为零且方法逻辑本身不产生错误(例如 getter)的情况?

  1. 别管它,让它惊慌
  2. 检查是否为 nil,如果为 true,则返回零值
  3. 使用有意义的消息检查 nil 和panic
  4. 检查 nil 并增强方法以在 nil 上返回错误
  5. 其他
  6. 这真的取决于

我倾向于#1,但认为虽然#3 有点冗长,但它可以使调试更容易。我的想法是调用代码应该测试 nil 并知道在这种情况下该怎么做。在简单的 getter 方法上返回错误太冗长了。

methods null go

4
推荐指数
1
解决办法
1027
查看次数

仅使用 async/await 时是否存在竞争条件?

.NET 5.0

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;

namespace AsyncTest
{
    [TestClass]
    public class AsyncTest
    {
        public async Task AppendNewIntVal(List<int> intVals)
        {
            await Task.Delay(new Random().Next(15, 45));

            intVals.Add(new Random().Next());
        }

        public async Task AppendNewIntVal(int count, List<int> intVals)
        {
            var appendNewIntValTasks = new List<Task>();

            for (var a = 0; a < count; a++)
            {
                appendNewIntValTasks.Add(AppendNewIntVal(intVals));
            }

            await Task.WhenAll(appendNewIntValTasks);
        }

        [TestMethod]
        public async Task TestAsyncIntList()
        {
            var appendCount = 30;
            var intVals = new List<int>();

            await AppendNewIntVal(appendCount, intVals);

            Assert.AreEqual(appendCount, intVals.Count);
        } …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous race-condition async-await .net-5

3
推荐指数
1
解决办法
173
查看次数

标签 统计

.net-5 ×1

async-await ×1

asynchronous ×1

c# ×1

go ×1

methods ×1

null ×1

race-condition ×1